package tech.aistar.day12;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.logging.Filter;

/**
 * 本类用来演示: File实例
 *
 * @author: success
 * @date: 2022/8/3 8:36 上午
 */
public class FileDemo {
    public static void main(String[] args) {
        //createFile("src/tech/aistar/day12/file.txt");
        //createFile("/Users/admin/Documents/success/teaching/wksp/dev/dy-corejava-tech/src/tech/aistar/day12/file2.txt");
       // delFile("/Users/admin/Documents/success/teaching/wksp/dev/dy-corejava-tech/src/tech/aistar/day12/file.txt");

        //createFolder("/Users/admin/Desktop/aa/bb/cc");
       // delFile("/Users/admin/Desktop/aa");
        //listFirstInfo("/Users/admin/Desktop/dy_corejava_note");

        listFolderWithFilename("/Users/admin/Desktop/dy_corejava_note",".md");

        //File f = new File("src/tech/aistar/day12");
        //File file = new File(f,"xx.txt");
        //System.out.println(file);
    }

    //1. 创建文件
    public static void createFile(String path){
        //1. 构建File实例
        //file到底是文件还是文件夹 - 取决于path
        File file = new File(path);
        //2. 判断这个file是否存在
        if(file.exists()){
            System.out.println(file+"已经存在了!不允许创建!");
            return;
        }
        //3. 创建文件
        try {
            if(file.createNewFile()){
                System.out.println(file+"创建成功!");
                //路径相关 - src/tech/aistar/day12/file.txt
                //path就是File构造传入的path
                System.out.println("path:"+file.getPath());
                // /Users/admin/Documents/success/teaching/wksp/dev/dy-corejava-tech/src/tech/aistar/day12/file.txt
                System.out.println("绝对路径:"+file.getAbsolutePath());
                // src/tech/aistar/day12
                System.out.println("父目录:"+file.getParent());

                //file.txt
                System.out.println("文件名称:"+file.getName());
            }else{
                //file会创建失败! - 同名,没有权限
                System.out.println(file+"创建失败!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //2. 创建文件夹
    public static void createFolder(String path){
        //1. 构建file实例
        File file = new File(path);

        //2. 判断file是否存在
        if(file.exists()){
            System.out.println(file+"目录已经存在!");
            return;
        }

        //3. 创建单层次的目录 - 一次只可以创建一个目录
        //if(file.mkdir()){
        if(file.mkdirs()){//同时可以创建多个目录
            System.out.println(file+",创建成功!");
        }else{
            System.out.println(file+"创建失败!");
        }
    }

    //3. 删除File
    public static void delFile(String path){
        File file = new File(path);

        if(!file.exists()){
            System.out.println(file+"不存在!");
            return;
        }
        //1. 直接删除文件
        //2. 只能删除空的目录
        if(file.delete()){
            System.out.println(file+"删除成功!");
        }else{
            System.out.println(file+"删除失败!");
        }
    }

    //4. 传入一个目录,打印该目录下的第一层的信息
    //信息包含 - 如果是文件 - 直接输出文件的名称
    //如果是文件夹 - 输出文件夹的绝对路径
    public static void listFirstInfo(String path){
        File file = new File(path);

        if(!file.exists()){
            System.out.println(file+"不存在!");
            return;
        }

        //2. 判断file是否为目录
        if(file.isDirectory()){
            File[] files = file.listFiles();
            //判断
            if(null!=files){
                for (File f : files) {
                    //判断是否为文件
                    if(f.isFile()){
                        System.out.println(f.getName());
                    }else if(f.isDirectory()){
                        System.out.println(f.getAbsolutePath());
                    }
                }
            }
        }else{
            System.out.println(file+"不是一个合法的目录!");
        }
    }


    //对文件进行筛选
    public static void listFolderWithFilename(String path,String suffix){
        File file = new File(path);
        if(!file.exists()){
            System.out.println(file+"不存在!");
            return;
        }
        if(!file.isDirectory()){
            System.out.println(file+"不是一个目录!");
            return;
        }
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //System.out.println("dir:"+dir+"=>name"+name);
                File file = new File(dir,name);
                //如果只需要取出文件
                if(file.isDirectory())
                    return false; // 不会获取出来放入到files中
                if(name.endsWith(suffix))
                    return true;
                return false;
            }
        });
        if(null!=files){
            for (File f : files) {
                //判断是否为文件
                if(f.isFile()){
                    System.out.println(f.getName());
                }else if(f.isDirectory()){
                    System.out.println(f.getAbsolutePath());
                }
            }
        }
    }

}

